package futbolpredictor;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.nio.charset.Charset;
import java.text.Normalizer;
import java.util.AbstractList;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 *
 * @author Rodrigo
 */
public class PostProcesador {

	private AbstractList<EjemploPost> ejemplos;

	private String deAccent(String str) {
		if (str == null) {
			return null;
		}
		String nfdNormalizedString = Normalizer.normalize(str, Normalizer.Form.NFD);
		Pattern pattern = Pattern.compile("\\p{InCombiningDiacriticalMarks}+");
		return pattern.matcher(nfdNormalizedString).replaceAll("");
	}

	PostProcesador(String archivo, int anioLimInf, int anioLimSup) {
		try {
			InputStreamReader fr = new InputStreamReader(new FileInputStream(archivo), Charset.forName("ISO-8859-15"));
			BufferedReader br = new BufferedReader(fr);
			ejemplos = new ArrayList();
			String line;

			// patern que agarra los diferentes elementos del CSV preprocesado
			Pattern pattCSV = Pattern.compile("([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*)");

			Pattern pattClausura = Pattern.compile("Clausura");
			Pattern pattApertura = Pattern.compile("Apertura");

			while ((line = deAccent(br.readLine())) != null) {
				Matcher mCSV = pattCSV.matcher(line);

				if (mCSV.find()) {
					String nombreLiga = mCSV.group(1).trim();
					String nombreTorneo = mCSV.group(2).trim();

					Matcher mClausura = pattClausura.matcher(nombreTorneo);
					Matcher mApertura = pattApertura.matcher(nombreTorneo);
					if(mClausura.find()){
						nombreTorneo = "Clausura";
					}else if(mApertura.find()){
						nombreTorneo = "Apertura";
					}


					String anioTorneo = mCSV.group(3).trim();
					String numeroRonda = mCSV.group(4).trim();
					String nombreLocal = mCSV.group(5).trim();
					String nombreVisitante = mCSV.group(6).trim();
					String golesLocal = mCSV.group(7).trim();
					String golesVisitante = mCSV.group(8).trim();
					String resultado = mCSV.group(9).trim();					
					if ((Integer.parseInt(anioTorneo) > anioLimInf) && (Integer.parseInt(anioTorneo) < anioLimSup)){
						EjemploPost ej = new EjemploPost(/*"L", */nombreLocal, nombreVisitante, 
								resultado, nombreLiga, nombreTorneo, numeroRonda, anioTorneo);
						
//						EjemploPost ej2 = new EjemploPost("V", nombreVisitante, nombreLocal,
//								resultado, nombreLiga, nombreTorneo, numeroRonda, anioTorneo);
						
						ejemplos.add(ej);
//						ejemplos.add(ej2);
					}

				} else {
					throw new Exception("CSV preprocesado esta mal formado");
				}
			}

		} catch (Exception e) {
			System.out.println(e.toString());
		}
	}

	void guardarCSV(String archivo) {
		try {
			Writer out = new OutputStreamWriter(new FileOutputStream(archivo, false), Charset.forName("ISO-8859-15"));

			out.write(/*"LocalOVisitante, " +*/
					"NombreLocal, NombreVisitante, Resultado");
			out.write(System.getProperty("line.separator"));

			Iterator it = this.ejemplos.iterator();
			while (it.hasNext()) {
				out.write(((EjemploPost) it.next()) + "");
				out.write(System.getProperty("line.separator"));
			}
			out.close();
		} catch (Exception e) {
			System.out.println(e.toString());
		}
	}
}
